<?php

class db {

    protected static $_instance;

public static function getInstance() {
    if (self::$_instance === null) {
        self::$_instance = new self;
    }
    return self::$_instance;
}


private function __construct() {
  $db=new security;
  if ($this->conn = mysqli_connect( $db->db_host, $db->db_login, $db->db_passw, $db->db_base )){
  mysqli_set_charset( $this->conn, 'utf8' );
  }
  else{
    echo 'Ошибка подключения к БД';
    exit();
  }
}

private function __clone() {
}

private function __wakeup() {
}


/** Ф-ия запроса к базе данных
 * @param $sql string строка запроса
 * @return  $return_array[] ассоциативный массив данных или false*/

public static function query_arr($sql){
    $obj=self::getInstance();

    if (isset($obj->conn)){
        if ($result=mysqli_query($obj->conn,$sql)){
            while ($res=mysqli_fetch_assoc($result)){
                $return_array[]=$res;
            }
            mysqli_free_result($result);
            unset($res);
            return $return_array;
        }
        else{
            echo mysqli_error($obj->conn);
            exit;
        }
    }
    return false;

}

/**
 * функция запроса к базе данных
 * @param $sql string строка запроса
 * @return bool|mysqli_result возвращает объект базы данных, иначе false
 */
public static function query($sql){
    $obj=self::getInstance();

    if (isset($obj->conn)){
        if ($result=mysqli_query($obj->conn,$sql)){
            return $result;
        }
        else{
            //echo mysqli_error($obj->conn);
            return false;
        }
    }
    return false;

}


public static function update($sql){
    $obj=self::getInstance();

    if (isset($obj->conn))
    {
        if ($result=mysqli_query($obj->conn,$sql))
        {
            if (mysqli_affected_rows($obj->conn)){
                return true;
            }
            else
            {
                return false;
            }
        }
            else
        {
            return false;
        }
    }
    else
    return false;

}

/**
 * функция экранирования mysqli запросов
 * @param $param string строка которую нужно отфильтровать
 * @return bool|string возвращает отфильтрованную строку, иначе false
 */
public static function escape($param){
    $obj=self::getInstance();
    if (isset($obj->conn)){
        if ($result=mysqli_real_escape_string($obj->conn,$param)){
            return $result;
        }
    }
    return false;
}

/**
 * функция подсчета строк
 * @param $table string таблица в которой нужно посчитать количество строк
 * @return int возвращает число строк, иначе 0
 */
    public static function getcount($table){
        $obj=self::getInstance();

        if (isset($obj->conn)){
            $table=self::escape($table);
            if ($result=mysqli_query($obj->conn,'SELECT * FROM '.$table)){
                if($result=mysqli_num_rows($result)){
                    return $result;
                }
                else {
                    return 0;
                }
            }
            else{
                return 0;
            }
        }
        return 0;

    }


}
?>